package com.sky.controller.admin;

import com.sky.constant.MessageConstant;
import com.sky.result.Result;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

/**
 * 通用接口
 */
@RestController
@RequestMapping("/admin/common")
@Slf4j
public class CommonControllor {
    @Autowired
    private AliOssUtil aliOssUtil;


    /**
     pring框架提供了MultipartFile接口，用于处理文件上传请求。MultipartFile可以代表一个多部分文件上传请求中的一个文件，提供了一系列方法用于获取文件的各种属性和内容，使得在后端处理文件上传变得十分方便。下面我们将介绍MultipartFile在Web应用中的几种常见使用场景。
     1. 图片上传
     在Web应用中，图片上传是一种常见的场景。用户需要上传头像、相片、证件照等图片文件，而后端需要接收并保存这些文件。使用MultipartFile接口可以轻松地实现图片文件的接收和处理。通过获取文件的原始文件名、内容类型、大小等属性，我们可以实现对图片文件的有效管理和存储。例如，我们可以将图片文件保存到服务器的文件系统中，或者将其存储到云存储服务中。
     2. 文件下载
     除了文件上传，文件下载也是Web应用中常见的功能需求。使用MultipartFile接口，我们可以实现文件的下载功能。在服务器端，我们可以将文件作为MultipartFile对象进行处理，并通过设置响应头信息，将文件作为下载内容返回给客户端。客户端接收到文件后，可以将其保存到本地磁盘或进行其他处理。
     3. 文件编辑
     在Web应用中，有时候用户需要对上传的文件进行编辑操作，例如修改文件名、修改文件内容等。使用MultipartFile接口，我们可以实现对文件的编辑功能。首先，我们可以通过MultipartFile接口获取上传的文件对象，然后对其进行相应的编辑操作。例如，我们可以修改文件的名称、修改文件的内容等。编辑完成后，我们可以将修改后的文件保存到服务器或返回给客户端。
     4. 文件预览和展示
     在Web应用中，有时候我们需要将上传的文件进行预览或展示。例如，在文档管理系统中，用户需要预览或下载文档文件。使用MultipartFile接口，我们可以实现文件的预览和展示功能。我们可以将文件作为MultipartFile对象进行处理，然后将其内容转换为适当的格式进行展示。例如，对于PDF文件，我们可以使用PDF阅读器插件进行展示；对于图片文件，我们可以将其直接展示在网页上。
     5. 文件批量上传和处理
     在实际应用中，有时候用户需要批量上传多个文件，并对这些文件进行处理。使用MultipartFile接口，我们可以实现文件的批量上传和处理功能。我们可以将多个文件作为一个多部分文件上传请求进行处理，然后对每个文件进行相应的操作。例如，我们可以将多个图片文件批量上传到服务器，并对它们进行压缩、裁剪等处理。
     * @param file
     * @return
     */

    /**
     * 新增图片
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public Result<String> upload(MultipartFile file) {
        log.info("文件上传:{}",file);
//下面是一个阿里云上传对象，第一个是文件二进制数组，第二个是文件名字，推荐使用UUID
        try {
            //原始文件名称
            String originalFilname = file.getOriginalFilename();
            //截取原始文件扩展名 比如：jpg png等，从最后一个点截取
            String extension = originalFilname.substring(originalFilname.lastIndexOf("."));
            //使用uuid随机命名，并且进行拼接：实现随机命名.jpg
            String ObjectName=UUID.randomUUID().toString()+extension;
            //文件请求路径
            String filepath=aliOssUtil.upload(file.getBytes(), ObjectName);
            return Result.success(filepath);
        }
        catch (IOException e){
            log.error("文件上传失败: {}",e);
        }

        return Result.error(MessageConstant.UPLOAD_FAILED);
    }
}
